package com.rayframework.beans.factory.annotation;

import java.lang.annotation.*;

/**
 * 自动装配bean对象
 * 它可以被用在类的成员变量、构造函数和setter方法上
 * 需要在标注 @RayComponent 注解的类下使用
 * 依赖注入 自动装配
 * 如果有多个实现类重名，使用 {@link RayQualifier} 标注正常的依赖注入项
 *
 * @author LiaoYuXing-Ray
 * @version 1.0
 * @createDate 2023/9/19 14:20
 * @see RayQualifier
 **/
@Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE}) // 指定该注解可以应用于构造函数、方法、参数、字段和注解类型
@Retention(RetentionPolicy.RUNTIME) // 指定该注解在运行时仍然有效
@Documented // 表示该注解将被包含在JavaDoc文档中
public @interface RayAutowired {
    // 是否使用，默认值为true
    boolean required() default true;
}

/*
    @Target注解用于指定被注解的元素类型。它有以下几种取值：

    ElementType.TYPE：表示类、接口（包括注解类型）或enum声明。
    ElementType.FIELD：表示类、接口（包括注解类型）或enum声明中的字段。
    ElementType.METHOD：表示类中的方法。
    ElementType.PARAMETER：表示方法参数。
    ElementType.CONSTRUCTOR：表示类的构造方法。
    ElementType.LOCAL_VARIABLE：表示方法中的局部变量。
    ElementType.ANNOTATION_TYPE：表示注解类型。
    ElementType.PACKAGE：表示包。
*/
